package com.mydom4j.parse;

import com.mydom4j.util.DomGetter;
import org.dom4j.Document;
import org.dom4j.Node;

import java.io.File;
import java.util.List;

/**
 * Created by wuxia on 2016/8/27 0027.
 */
public class XPathParser {

    public static void main(String[] args) {
        Document document = DomGetter.getDomFromFile(new File("C:/Users/wuxia/Desktop/spring.xml"));
        XPathParser.getByXPath(document);
    }


    /**
     * 通过Xpath的方式解析
     * @param document
     */
    public static void getByXPath(Document document) {
        System.out.println("============获取 / 根节点=============");
        Node nodeRoot = document.selectSingleNode("/");
        System.out.println(nodeRoot.asXML());

        System.out.println("\n============获取 / 根节点下的 beans节点下的 所有节点=============");

        List nodeList = document.selectNodes("/beans/*");
        for (int i = 0; i < nodeList.size(); i++) {
            System.out.println(((Node)nodeList.get(i)).asXML());
        }

        System.out.println("\n============获取文档中所有name='item'的 bean 节点=============");
        List node4ItemList = document.selectNodes("//bean[@name='book']");
        for (int i = 0; i < node4ItemList.size(); i++) {
            System.out.println(((Node)node4ItemList.get(i)).asXML());
        }

        System.out.println("\n============获取文档中所有 price>37 的 bean节点=============");
        Node node = document.selectSingleNode("//bean[@price>37.00]");
        if (null != node) {
            System.out.println(node.getText());
        }

        System.out.println("\n============获取文档中所有 prefix节点 的所有bean节点以及当前节点=============");
        Node nodePrefix = document.selectSingleNode("//prefix");
        //用 XPath 轴 的方式获取 （轴可定义某个 *相对于当前节点* 的节点集）
        List nodePrefixParentAndIt = nodePrefix.selectNodes("ancestor-or-self::bean");
        for (int i = 0; i < nodePrefixParentAndIt.size(); i++) {
            System.out.println(((Node)nodePrefixParentAndIt.get(i)).asXML());
        }

    }

    //对Xpath 有兴趣可以参考 http://www.cnblogs.com/forlina/archive/2011/06/09/2076534.html
}
